/*
 * Nivel.h
 *
 * Author: Grupo Nro.
 */

#ifndef NIVEL_H_
#define NIVEL_H_

#include <vector>
#include <string>
#include "MapObject.h"
#include "Spawner.h"
#include "Plant.h"

// Modela un nivel de una campaña. Contiene toda la información y el estado
// inicial del mismo

class Nivel {
private:
	int id;
	std::vector<MapObject*> map_objects;
	std::vector<Spawner*> spawners;
	std::vector<Plant*> plants;
	int map_height;
	int map_width;
	std::vector<std::pair<int, int> > bomberman_spawns;
	int number_of_enemies;
	std::string tile_map_representation;

public:
	Nivel();
	Nivel(int id);
	virtual ~Nivel();
	int getId();
	void addMapObject(MapObject* mapObject);
	std::vector<MapObject*> & getMapObjects();
	void addSpawner(Spawner& spawner);
	std::vector<Spawner*>& getSpawners();
	void addPlant(Plant& plant);
	std::vector<Plant*>& getPlants();
	void setMapHeight(int height);
	int getMapHeight();
	void setMapWidth(int width);
	int getMapWidth();
	void addBombermanSpawnPoint(int x, int y);
	std::vector<std::pair<int, int> >& getBombermanSpawnPoints();
	void setNumberOfEnemies(int enemies);
	int getNumberOfEnemies();
	void setTileMapRepresentation(std::string tile_map_representation);
	std::string& getTileMapRepresentation();
};

#endif /* NIVEL_H_ */
